给出$n$个点$m$条边的有向带权图,求$1$~$n$的两条不相交(除了起点和终点外没有公共点)的路径,使得权和最小。
题解
- 经典的结点容量问题
- 直接给每条边流量限制为 $1$,是不可行的,因为还有可能重复经过某些点(例如两个金字塔连在一起)。
- 把$[2,n-1]$所有点拆成两个点,这两个点之间建一条流量为 $1$,费用为 $0$ 的边,就可以保证不重复经过同一点。
- 建图后,跑一个流量为 $2$ 的最小费用最大流即可
代码
1 |
|
Success and failure are temporary.
给出$n$个点$m$条边的有向带权图,求$1$~$n$的两条不相交(除了起点和终点外没有公共点)的路径,使得权和最小。
1 | #include<bits/stdc++.h> |